package com.ylbh.modules.goods.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ylbh.common.pojo.goods.dto.*;
import com.ylbh.common.pojo.goods.vo.*;
import com.ylbh.common.pojo.hn.vo.HNSpecVO;
import com.ylbh.modules.accessory.CombinedCommodities;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 *
 *
 * @author czx
 * @date 2019-04-23 15:17:38
 */
@Mapper
@Repository
public interface ShoppingGoodsMapper extends BaseMapper<GoodsDTO> {

    /**
     * 商品信息列表
     * @param goodsListDTO
     * @param page
     * @return
     */
    List<GoodsListVO> selectGoodsList(@Param(value = "goodsListDTO") GoodsListDTO goodsListDTO, Page page);

    /**
     * 商品信息详情
     * @param id
     * @return
     */
    GoodsDetailsVO selectGoodsById(@Param(value = "id")Long id);

    /**
     * 根据id来查找该商品对应的轮播图集合
     * @param id
     * @return
     */
    List<RotationChartVO> rotationChart(@Param(value = "id") Long id);

//    /**
//     * 修改对应商品的详情信息
//     * @param updateGoodsDetailsDTO
//     */
//    void updateGoodsDetails(@Param(value = "updateGoodsDetailsDTO")GoodsDetailsDTO updateGoodsDetailsDTO);

    /**
     * 修改商品的主图
     * @param updateGoodsDetailsDTO
     */
    void updateMainPic(@Param(value = "updateGoodsDetailsDTO") GoodsDetailsDTO updateGoodsDetailsDTO);

    /**
     * 修改商品的轮播图
     * @param updateGoodsDetailsDTO
     */
    void updateWheelPlantingPic(@Param(value = "updateGoodsDetailsDTO")GoodsDetailsDTO updateGoodsDetailsDTO);

    /**
     * 修改时有新的图片增加记录
     * @return
     */
    Long insertWheelPlantingPic(@Param(value = "goodsRotationChartDTO") GoodsRotationChartDTO goodsRotationChartDTO);

    /**
     * 增加中间表记录
     * @param id
     * @param accId
     */
    void insertGoodsPhoto(@Param(value = "id") Long id,@Param(value = "accId") Long accId);

    /**
     * 删除中间记录表记录
     * @param photoId
     * @param goodsId
     */
    void deleteGoodsPhoto(@Param(value = "photoId")Long photoId,@Param(value = "goodsId")Long goodsId);

    /**
     * 批量商品修改状态
     * @param goodsListDTO
     * @param ids
     */
    void batchUpdateState(@Param("goodsListDTO") GoodsListDTO goodsListDTO,@Param("ids") Integer[] ids);

    /**
     * 修改商城商品sku信息详情
     * @param id
     * @param goodsInventoryDetail
     */
    void updateSkuById(@Param("id") Long id,@Param("goodsInventoryDetail") String goodsInventoryDetail);

    /**
     * 插入商品图片
     * @param accessoryDTO
     * @return
     */
    void insertGoodPhoto(AccessoryDTO accessoryDTO);

    /**
     * 查询轮播图中间表数据
     * @param goodsId
     * @param photoId
     */
    void insertRollingImg(@Param("goodsId") Long goodsId,@Param("photoId") Long photoId);

    /**
     * 插入shopping_goods_spec中间表规格数据
     * @param specId
     * @param goodsId
     */
    void insertGoodsSpec(@Param("specId") Object specId, @Param("goodsId") Long goodsId);

    /**
     * 修改商品主图片
     * @param accessoryDTO
     */
    void updateGoodPhoto(AccessoryDTO accessoryDTO);

    /**
     * 删除图片表中的信息
     * @param id
     */
    void deleteGoodsAcc(@Param(value = "id")Long id);

    /**
     * 删除商品与规格直接的绑定关系
     * @param id
     */
    void deleteGoodsSpec(Long id);

    /**
     * 导出商城商品信息
     * @param goodsListDTO
     */
    List<GoodsExcelEntityVO> selectGoodsExcel(@Param(value = "goodsListDTO") GoodsListDTO goodsListDTO);

    /**
     * 通过创建时间修改商品新品上架状态
     * @param value
     * @param statTime
     * @param endTime
     */
    void updateIsNewByAddTime(@Param("value") int value, @Param("statTime") Date statTime, @Param("endTime") Date endTime);

    List<GoodsDTO> selectPriceType();

    List<GoodsQueryVO> selectGoodsQuery();

    List<String> selectWheelPlantingImage(Long id);

    /**
     * 添加商品
     * @param goodsDTO
     */
    void insertGoods(@Param(value = "goodsDTO") GoodsDTO goodsDTO);

    /**
     * 查询该商品是否是已经添加到活动的商品
     * @param id
     * @return
     */
    GoodsDetailsVO selectIsActivityGoods(Long id);

    List<GoodsDTO> selectGoodsCount();

    /**
     * 商城合并，查询商品
     * @return
     */
    List<GoodsDTO> selectAllGoods();

    /**
     * 商城合并，查询规格属性名
     * @param ids
     * @return
     */
    List<String> selectSpecValueById(@Param("ids") List<String> ids);

    /**
     * 批量修改合并后的商品
     * @param list
     */
    void updateMergeGoodsById(CombinedCommodities list);

    void updateGoodsStatus(Long id);

    /**
     * 根据品牌ID查询该商品总数
     * @param id
     * @return
     */
    Integer selectCountByBrandId(String id);

    /**
     * 查询该商品是否添加过
     * @param sku
     * @return
     */
    int selectSKu(String sku);

    /**
     * 根据候鸟的sku来上下架商品
     * @param goodsSku
     * @param status
     */
    void updateGoodsShelve(String goodsSku, int status);

    /**
     * 根据sku查询出商品的id
     * @param goodsSku
     * @return
     */
    int selectGoodsIdBySku(String goodsSku);

    /**
     * 修改第三方商品的订单状态为已发货
     * @param hnOrderNo
     */
    void updateOrderData(String hnOrderNo);

    /**
     * 根据规格属性id查询属性名
     * @param s
     * @return
     */
    String selectSepcProperty(String s);

    /**
     * 查询出所有未删除的商品
     */
    List<GoodsDTO> selectIsDeleteGoods();

    /**
     * 修改商品的利润
     * @param gd
     */
    void updateGoodsCostPrice(GoodsDTO gd);

    /**
     * 查询出规格属性名id
     * @param unit
     * @return
     */
    List<Integer> selectGoodsSpecification(String unit);

    /**
     * 查询这个规格是否已经存在数据库
     * @param name
     * @param id
     * @return
     */
    List<Integer> selectSpecPropertyByNameOrId(String name, Integer id);

    /**
     * 新建属性
     * @param spd
     */
    void insertSpecIfication(SpecPropertyDTO spd);

    /**
     * 修改商品展示详情
     * @param dto
     */
    void updateGoodsDetailsBySku(@Param(value = "dto") GoodsDTO dto);

    /**
     * 获取特定时间内的商品
     * @return
     */
    List<GoodsDTO> selectGoodsByTime();

    /**
     * 上传商品验证型号是否已存在
     * @param goodsSerial
     * @return
     */
    int selectVerificationGoodsSerial(String goodsSerial);

    /**
     * 修改商品的规格重量
     * @param id
     * @param goodsInventoryDetail
     */
    void updateGoodsWeight(Integer id, String goodsInventoryDetail);

    /**
     * 根据型号查询出所有的候鸟商品
     * @return
     */
    ArrayList<String> selectHNGoods();

    List<GoodsDTO> selectGoodsPriceOrCount();

    /**
     *
     * @param goodsId
     * @return
     */
    List<HNSpecVO> selectGoodsIdOrSpecIdByGoodsId(@Param(value = "goodsId") int goodsId);
}
